export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('beforeResponse', (event, _) => {
    const startTime = event.context.reqStartTime || Date.now();

    // 将请求处理时间保存在 context 中，日志中会使用
    event.context.duration = Date.now() - startTime;
  });

  // 错误处理
  nitroApp.hooks.hook('error', (error, { event }) => {
    const startTime = event!.context.startTime || Date.now();
    const duration = event!.context.duration || Date.now() - startTime;

    console.error(`---- [${new Date().toISOString()}] Error in ${event!.method} ${event!.path} (${duration}ms):`, error);

    // 根据错误类型返回不同的状态码
    const statusCode = event?.node.res.statusCode || 500;
    const message = event?.node.res.statusMessage || RESPONSE_CODE_MAP[statusCode] || 'Internal Server Error';

    // 返回包装后的错误响应
    return wrapError(error, statusCode, message);
  });
});
